--- 模块功能：HX 8347驱动芯片LCD命令配置
-- @author openLuat
-- @module ui.color_lcd_spi_hx8347
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.27

--[[
注意：disp库目前支持I2C接口和SPI接口的屏，此文件的配置，硬件上使用的是LCD专用的SPI引脚，不是标准的SPI引脚
硬件连线图如下：
Air模块 LCD
GND--地
SPI_CS--片选
SPI_CLK--时钟
SPI_DO--数据
SPI_DI--数据/命令选择
VDDIO--电源
UART1_CTS--复位
注意：Air202早期的开发板，UART1的CTS和RTS的丝印反了
]]

module(...,package.seeall)

--led，背光控制引脚
local pinled = pio.P0_31

--[[
函数名：init
功能  ：初始化LCD参数
参数  ：无
返回值：无
]]
local function init()
    local para =
    {
        width = 240, --分辨率宽度，128像素；用户根据屏的参数自行修改
        height = 320, --分辨率高度，160像素；用户根据屏的参数自行修改
        bpp = 16, --位深度，彩屏仅支持16位
        --bus = disp.BUS_SPI4LINE, --LCD专用SPI引脚接口，不可修改
        bus = disp.BUS_SPI,
        xoffset = 0, --X轴偏移
        yoffset = 0, --Y轴偏移
        freq = 52000000, --spi时钟频率，支持110K到13M（即110000到13000000）之间的整数（包含110000和13000000）
        pinrst = pio.P0_3, --reset，复位引脚
        pinrs = pio.P0_12, --rs，命令/数据选择引脚
        --初始化命令
        --前两个字节表示类型：0001表示延时，0000或者0002表示命令，0003表示数据
        --延时类型：后两个字节表示延时时间（单位毫秒）
        --命令类型：后两个字节命令的值
        --数据类型：后两个字节数据的值
        initcmd =
        {
            --0x00010064,
            0x000200EA,
            0x00030000,
            0x000200EB,
            0x00030020,
            0x000200EC,
            0x0003003C,
            0x000200ED,
            0x000300C4,
            0x000200E8,
            0x00030048,
            0x000200E9,
            0x00030038,
            0x000200F1,
            0x00030001,
            0x000200F2,
            0x00030008,
            0x00020040,
            0x00030001,
            0x00020041,
            0x00030007,
            0x00020042,
            0x00030009,
            0x00020043,
            0x00030019,
            0x00020044,
            0x00030017,
            0x00020045,
            0x00030020,
            0x00020046,
            0x00030018,
            0x00020047,
            0x00030061,
            0x00020048,
            0x00030000,
            0x00020049,
            0x00030010,
            0x0002004A,
            0x00030017,
            0x0002004B,
            0x00030019,
            0x0002004C,
            0x00030014,
            0x00020050,
            0x0003001F,
            0x00020051,
            0x00030028,
            0x00020052,
            0x00030026,
            0x00020053,
            0x00030036,
            0x00020054,
            0x00030038,
            0x00020055,
            0x0003003E,
            0x00020056,
            0x0003001E,
            0x00020057,
            0x00030067,
            0x00020058,
            0x0003000B,
            0x00020059,
            0x00030006,
            0x0002005A,
            0x00030008,
            0x0002005B,
            0x0003000F,
            0x0002005C,
            0x0003001F,
            0x0002005D,
            0x000300CC,
            0x0002001B,
            0x0003001B,
            0x0002001A,
            0x00030001,
            0x00020024,
            0x00030060,
            0x00020025,
            0x00030058,
            0x00020023,
            0x0003006E,
            0x00020018,
            0x00030036,
            0x00020019,
            0x00030001,
            0x00020001,
            0x00030000,
            0x0002001F,
            0x00030088,
            0x0001000A,
            0x0002001F,
            0x00030080,
            0x0001000A,
            0x0002001F,
            0x00030090,
            0x0001000A,
            0x0002001F,
            0x000300D0,
            0x0001000A,
            0x00020017,
            0x00030005,
            0x00020036,
            0x00030009,
            0x00020028,
            0x00030038,
            0x00010032,
            0x00020028,
            0x0003003F,
            0x00020002,
            0x00030000,
            0x00020003,
            0x00030000,
            0x00020004,
            0x00030000,
            0x00020005,
            0x000300EF,
            0x00020006,
            0x00030000,
            0x00020007,
            0x00030000,
            0x00020008,
            0x00030001,
            0x00020009,
            0x0003003F,
            0x00020022,
            0x00010078,
        },

        addresscmd = {
            1,  -- 指令集类型，HX8347, CASTART1, CASTART2, CAEND1, CAEND2, RASTART1, RASTART2, RAEND1, RAEND2, GRAMWRITE
            0x02,
            0x03,
            0x04,
            0x05,
            0x06,
            0x07,
            0x08,
            0x09,
            0x22,
        },

        --休眠命令
        sleepcmd = {
            0x00020028,
            0x000300B8,
            0x00010028,
            0x0002001F,
            0x00030089,
            0x00010028,
            0x00020028,
            0x00030004,
            0x00010028,
            0x00020019,
            0x00030000,
            0x00010005,
        },
        --唤醒命令
        wakecmd = {
            0x00020018,
            0x00030036,
            0x00020019,
            0x00030001,
            0x0002001F,
            0x00030088,
            0x00010005,
            0x0002001F,
            0x00030080,
            0x00010005,
            0x0002001F,
            0x00030090,
            0x00010005,
            0x0002001F,
            0x000300D0,
            0x00010005,
            0x00020028,
            0x00030038,
            0x00010028,
            0x00020028,
            0x0003003F,
        }
    }
    disp.init(para)
    disp.clear()
    disp.update()
end

--控制SPI引脚的电压域
pmd.ldoset(6,pmd.LDO_VMMC)
init()

--打开背光
pio.pin.setdir(pio.OUTPUT,pinled)
pio.pin.setval(1,pinled)
--实际使用时，用户根据自己的lcd背光控制方式，添加背光控制代码
